package com.example.demo.service;

import com.example.demo.dto.WorkflowTaskTypeDTO;
import com.example.demo.dto.TaskTypeApprovalStatisticsDTO;
import java.util.List;

public interface WorkflowTaskTypeService {

    /**
     * 获取所有流程任务映射
     */
    List<WorkflowTaskTypeDTO> getAllWorkflowTaskTypes();

    /**
     * 根据ID获取流程任务映射
     */
    WorkflowTaskTypeDTO getWorkflowTaskTypeById(Long id);

    /**
     * 根据流程ID获取流程任务映射列表
     */
    List<WorkflowTaskTypeDTO> getWorkflowTaskTypesByWorkflowId(Long workflowId);

    /**
     * 根据任务类型ID获取流程任务映射列表
     */
    List<WorkflowTaskTypeDTO> getWorkflowTaskTypesByTaskTypeId(Long taskTypeId);

    /**
     * 根据数据源ID获取流程任务映射列表
     */
    List<WorkflowTaskTypeDTO> getWorkflowTaskTypesByDatasourceId(Long datasourceId);

    /**
     * 创建流程任务映射
     */
    WorkflowTaskTypeDTO createWorkflowTaskType(WorkflowTaskTypeDTO workflowTaskTypeDTO);

    /**
     * 批量创建流程任务映射
     */
    List<WorkflowTaskTypeDTO> batchCreateWorkflowTaskTypes(List<WorkflowTaskTypeDTO> workflowTaskTypeDTOs);

    /**
     * 更新流程任务映射
     */
    WorkflowTaskTypeDTO updateWorkflowTaskType(Long id, WorkflowTaskTypeDTO workflowTaskTypeDTO);

    /**
     * 删除流程任务映射
     */
    void deleteWorkflowTaskType(Long id);

    /**
     * 根据流程ID删除流程任务映射
     */
    void deleteWorkflowTaskTypesByWorkflowId(Long workflowId);

    /**
     * 根据流程ID和任务类型ID删除流程任务映射
     */
    void deleteWorkflowTaskTypeByWorkflowIdAndTaskTypeId(Long workflowId, Long taskTypeId);

    /**
     * 统计流程任务映射数量
     */
    long countWorkflowTaskTypes();
    
    /**
     * 根据任务类型ID、版本、部门和应用信息获取任务审批统计信息
     */
    TaskTypeApprovalStatisticsDTO getTaskTypeApprovalStatistics(Long taskTypeId, String version, String dep, String app);
    
    /**
     * 根据工作流ID、版本、部门和应用信息获取工作流任务审批统计信息
     */
    List<TaskTypeApprovalStatisticsDTO> getWorkflowApprovalStatistics(Long workflowId, String version, String dep, String app);
}